package cz.vse.adventura.po1715.xkosd00_kostka.gui._04_abstract;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import javax.swing.JCheckBoxMenuItem;
import javax.swing.JMenu;
import javax.swing.JMenuItem;

/*******************************************************************************
 * Instance třídy {@code MenuRecord} představují položku hlavní nabídky,
 *      ve které jsou volby pro záznam deníku
 *
 * @author    Dominik KOSTKA
 * @version   0.00.000
 */
public class MenuRecord extends JMenu
{
//== KONSTANTNÍ ATRIBUTY TŘÍDY =================================================
//== PROMĚNNÉ ATRIBUTY TŘÍDY ===================================================
//== STATICKÝ INICIALIZAČNÍ BLOK - STATICKÝ KONSTRUKTOR ========================
//== KONSTANTNÍ ATRIBUTY INSTANCÍ ==============================================

    /** GUI, pro které tato instance pracuje. */
    private final GUI_04 gui;

//== PROMĚNNÉ ATRIBUTY INSTANCÍ ================================================
//== PŘÍSTUPOVÉ METODY VLASTNOSTÍ TŘÍDY ========================================
//== OSTATNÍ NESOUKROMÉ METODY TŘÍDY ===========================================

//##############################################################################
//== KONSTRUKTORY A TOVÁRNÍ METODY =============================================

    /***************************************************************************
     *
     */
    public MenuRecord(GUI_04 gui)
    {
        super("Záznam");
        setMnemonic('z');
        this.gui = gui;
        addItemRecordActivity();
        addItemShowLogWindow();
        addItemRecordInFile();
        addItemNewFile();
    }



//== ABSTRAKTNÍ METODY =========================================================
//== PŘÍSTUPOVÉ METODY VLASTNOSTÍ INSTANCÍ =====================================
    
    
    
//== OSTATNÍ NESOUKROMÉ METODY INSTANCÍ ========================================
//== SOUKROMÉ A POMOCNÉ METODY TŘÍDY ===========================================
    
    /***************************************************************************
     * Přidá položku menu, kterou uživatel volí zaznamenávání průběhu do souboru
     */
    private void addItemRecordInFile()
    {
        
        final JCheckBoxMenuItem recordInFile = new JCheckBoxMenuItem(
                                              "Záznam do souboru", 
                                                gui.getLog().getRecordInFile());
        this.add(recordInFile);

        recordInFile.addItemListener(new ItemListener() {
            @Override
            public void itemStateChanged(ItemEvent e)
            {
                Boolean result = gui.getLog().setRecordInFile(recordInFile.getState());
                if(!result) {
                    recordInFile.setState(!recordInFile.getState());
                }
            }
        });
    }
    
    /***************************************************************************
     * Přidá položku menu, kterou uživatel volí zaznamenávání průběhu do okna
     */
    private void addItemShowLogWindow()
    {
        final JCheckBoxMenuItem showLog = new JCheckBoxMenuItem(
                                              "Zobrazit záznam", 
                                        gui.getLog().isLogWindowVisible());
        this.add(showLog);

        showLog.addItemListener(new ItemListener() {
            @Override
            public void itemStateChanged(ItemEvent e)
            {
                gui.getLog().setLogWindowVisible(showLog.getState());
            }
        });
    }
    
    /***************************************************************************
     * Přidá položku menu, kterou uživatel volí zaznamenávání průběhu do okna
     */
    private void addItemRecordActivity()
    {
        final JCheckBoxMenuItem recordActivity = new JCheckBoxMenuItem(
                                              "Zaznamenávat průběh", 
                                        gui.getLog().isRecorded());
        this.add(recordActivity);

        recordActivity.addItemListener(new ItemListener() {
            @Override
            public void itemStateChanged(ItemEvent e)
            {
                gui.getLog().setRecorded(recordActivity.getState());
            }
        });
    }  
     /***************************************************************************
     * Přidá položku menu, kterou uživatel volí nový soubor
     * pro záznamenávání průběhu
     */
    private void addItemNewFile()
    {
        final JMenuItem newFileItem = new JMenuItem(
                                              "Nový soubor záznamu");
        this.add(newFileItem);

        newFileItem.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e)
            {
                gui.getLog().chooseLogFile();
            }
        });
    }
    
//== SOUKROMÉ A POMOCNÉ METODY INSTANCÍ ========================================
//== INTERNÍ DATOVÉ TYPY =======================================================
//== TESTY A METODA MAIN =======================================================
//
//    /***************************************************************************
//     * Testovací metoda.
//     */
//    public static void test()
//    {
//        MenuRecord inst = new MenuRecord();
//    }
//    /** @param args Parametry příkazového řádku - nepoužívané. */
//    public static void main( String[] args )  {  test();  }
}
